前言
既然 ls 可以,那其他指令呢?
第四步:得寸進尺
我試了 whoami,想知道現在是以哪個使用者的身分在執行指令。
Payload: 8.8.8.8 && whoami
結果: 頁面回傳了 www-data。這讓我知道,我是以網頁伺服器專用的低權限使用者身分在執行指令。這算是不幸中的大幸,至少不是最高權限的 root。
接著,我更大膽地嘗試讀取系統檔案,比如存放使用者帳號資訊的 /etc/passwd。
Payload: 8.8.8.8 && cat /etc/passwd
結果: 頁面真的把 /etc/passwd 檔案的內容全部顯示了出來!我能看到伺服器上有 root, daemon, bin 等系統使用者。
第五步:檢視原始碼,找出元兇
DVWA 很棒的一點是,它允許我直接看造成漏洞的原始碼。我點擊頁面下方的「View Source」按鈕。
在 low 等級下,核心程式碼是這樣的:
原因一目了然。程式直接把我輸入的內容 ($target),用一個 . 拼接到了 ping -c 4 這串指令後面,然後就交給 shell_exec() 去執行了。它完全沒有檢查我的輸入中是否包含了 && 或 ; 這樣的特殊字元。這就像是對使用者完全不設防,給了攻擊者一個執行任意指令的後門。
今日總結
這個漏洞的威力讓我印象深刻。不過,這只是在 low 的安全等級。我很想知道,在 medium 等級下,DVWA 會用什麼方法來防禦這種攻擊?
明天,我的目標就是分析 medium 等級的防禦機制,並嘗試繞過它。